package com.zxwl.base.dao;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import com.zxwl.common.util.StringUtil;



/**
 * 处理查询参数
 * @author wsw
 *
 */
public class QueryParameter
{
	private Map<String,Parameter> params = new HashMap<String,Parameter>();
	
	public void setParams(Map<String,Parameter> params)
	{
		this.params = params;
	}
		
	public Map<String,Parameter> findParams()
	{
		return params;
	}
	
	/**
	 * 方便转JSon使用
	 * @return
	 */
	public Map<String,String> getParams()
	{
		Map<String,String> map = new HashMap<String,String>();
		Set<String> names = this.params.keySet();
		for(String name:names)
		{
			Parameter parameter = params.get(name);
			if(parameter != null && parameter.getValue() != null)
			{
				map.put(name, parameter.getValue().toString());
			}
		}
		
		return map;
	}
	
	public void addParameter(String parameterName,Object value)
	{
		Parameter parameter = new Parameter(parameterName,value.getClass());
		parameter.setValue(value);
		addParameter(parameter);
	}
	
	public void addStringParameter(String parameterName,Boolean fuzzy)
	{
		Parameter parameter = new Parameter(parameterName,String.class);
		parameter.setFuzzy(fuzzy);
		addParameter(parameter);
	}
	
	public void addStringParameter(String parameterName)
	{
		Parameter parameter = new Parameter(parameterName,String.class);
		addParameter(parameter);
	}
	
	public void addIntegerParameter(String parameterName)
	{
		Parameter parameter = new Parameter(parameterName,Integer.class);
		addParameter(parameter);
	}
	
	public void addDateParameter(String parameterName)
	{
		Parameter parameter = new Parameter(parameterName,Date.class);
		addParameter(parameter);
	}
	public void addDoubleParameter(String parameterName)
	{
		Parameter parameter = new Parameter(parameterName,Double.class);
		addParameter(parameter);
	}
	
	public void addFloatParameter(String parameterName)
	{
		Parameter parameter = new Parameter(parameterName,Float.class);
		addParameter(parameter);
	}
	public void removeParameter(String parameterName)
	{
		params.remove(parameterName);
	}
	public void addParameter(Parameter parameter)
	{
		if(null == parameter)
		{
			return ;
		}
		String paraName = parameter.getName();
		if(StringUtil.isEmpty(paraName))
		{
			return;
		}
		
		parameter.setDirction("IN");
		paraName = paraName.trim();
		params.put(paraName,parameter);
	}
	
	public void addOutParameter(String parameterName,Object value)
	{
		Parameter parameter = new Parameter(parameterName,value.getClass());
		parameter.setValue(value);
		addOutParameter(parameter);
	}
	
	public void addOutParameter(Parameter parameter)
	{
		if(null == parameter)
		{
			return ;
		}
		String paraName = parameter.getName();
		if(StringUtil.isEmpty(paraName))
		{
			return;
		}
		parameter.setDirction("OUT");
		paraName = paraName.trim();
		params.put(paraName,parameter);
	}
	
	public Parameter findParameter(String paraName)
	{
		return params.get(paraName);
	}
	
	public Object findParameterValue(String paraName)
	{
		Parameter para = findParameter(paraName);
		if(null != para)
		{
			return para.getValue();
		}
		return null;
	}
	
	public Set<String> findParameterNames()
	{
		return params.keySet();
	}
	public Integer size()
	{
		return params.size();
	}
	public Boolean containParameter(String paraName)
	{
		if(params.containsKey(paraName))
		{
			Object value = findParameterValue(paraName);
			if(value  != null && !value.toString().equals(""))
			{
				return true;
			}
		}
		return false;	
	}
}
